--- created: 2022-01-25T20:03:45 (UTC -08:00) tags: [] source: https://jigarius.com/blog/multiple-git-remote-repositories author: --- # Working with Git remotes and pushing to multiple Git repositories | Jigarius.com > ## Excerpt > Learn to work with multiple Git repositories – pull from and push to multiple git remotes with easy commands. --- As a programmer, one of the best things that has happened to me is Git! If you don’t know what [Git](https://en.wikipedia.org/wiki/Git) is, you should probably read a paragraph about it before you continue. Git allows you to synchronize the code on your computer with code on a remote repo shared with other developers – usually team members. In this tutorial we will learn to configure one or more Git remotes and pushing code to them with a single command. ## Two Minute Version - Define a git remote which will point to multiple git remotes. - Say, we call it “all”: `git remote add all REMOTE-URL-1`. - Register 1st push URL: `git remote set-url --add --push all REMOTE-URL-1`. - Register 2nd push URL: `git remote set-url --add --push all REMOTE-URL-2`. - Push a branch to all the remotes with `git push all BRANCH` – replace `BRANCH` with a real branch name. - You cannot pull from multiple remotes, but you can fetch updates from multiple remotes with `git fetch --all`. ## Prerequisites - Working knowledge of Git – `git init`, `git pull`, `git commit` and `git push`. - Have write access to one or more remote Git repositories. ## Adding multiple remotes When you do `git init`, you initialize a local Git repository. In general, the purpose is to synchronize this repo with a remote Git repo. To be able to synchronize code with a remote repo, you need to specify where the remote repo exists. The first step is to add remote repos to your project. ``` git remote add REMOTE-ID REMOTE-URL ```  By convention, the original / primary remote repo is called `origin`. Here’s a real example: ``` git remote add origin git@github.com:jigarius/toggl2redmine.git git remote add upstream git@bitbucket.org:jigarius/toggl2redmine.git ``` In the above example, we add the remote repository of a project called [Toggl 2 Redmine](https://github.com/jigarius/toggl2redmine) found on GitHub. Use the above command to add one or more remote Git repos – make sure that each repo has its unique ID, i.e. `origin`, `upstream` in the above example. ### Configure primary remote Though you can add multiple remotes, usually, each branch of your project can be configured to track a single remote branch. You can setup a branch to track a remote branch as follows: ``` git checkout BRANCH git branch -u origin/BRANCH ``` Here, `BRANCH` is the name of the remote branch, which is usually the same as your local branch. ### Change remote URL If you want to change the URL associated to a remote that you’ve already added, you can do it with the following command: ``` git remote set-url upstream git@foobar.com:jigarius/toggl2redmine.git ``` ## List all remotes To see a list of all remotes, simply use the following command: ``` $git remote -v origin git@github.com:jigarius/toggl2redmine.git (fetch) origin git@github.com:jigarius/toggl2redmine.git (push) upstream git@bitbucket.org:jigarius/toggl2redmine.git (fetch) upstream git@bitbucket.org:jigarius/toggl2redmine.git (push) ``` ## Remove a remote If you’ve added a remote which you no longer require, you can remove it as follows: ``` git remote remove upstream ``` ## Push to multiple remotes Now that you have a primary remote repo and other remotes as well, it’s time to configure the push. The objective is to _push to multiple Git remotes_ with a single `git push` command. To do this, choose a remote ID which will refer to all the remotes. I usually call it `all`, but there are developers who prefer `origin`. The idea is to add all the remote repo URLs as  “push URLs” to this remote. Here’s what you do: ``` git remote add all git@github.com:jigarius/toggl2redmine.git git remote set-url --add --push all git@github.com:jigarius/toggl2redmine.git git remote set-url --add --push all git@bitbucket.org:jigarius/toggl2redmine.git ``` If you don’t want to create an extra remote named `all`, you can skip the first command and use the remote `origin` instead of `all` in the subsequent command(s). Now, you can push to all remote repositories with a single command! ``` git push all BRANCH ``` ## Pull from multiple remotes It is not possible to `git pull` from multiple repos. However, you can `git fetch` from multiple repos with the following command: ``` git fetch --all ``` This will _fetch_ information from all remote repos. You can switch to the latest version of a branch on a particular remote with the command: ``` git checkout BRANCH git reset --hard REMOTE-ID/BRANCH ``` ## Conclusion It is easy to synchronize code between multiple git repositories, especially, pushing to multiple remotes. This is helpful when you’re maintaining mirrors / copies of the same repository. All you need to do is set up multiple push URLs on a remote and then perform `git push` to that remote as you usually do. ## Next steps - Read the official [documentation about git remotes](https://git-scm.com/docs/git-remote). - Share any tips you might have for working with multiple git remotes.